#include <math.h>


/*&h+*/
typedef struct
	{
	double x, y;
	} tVektor;

typedef struct
	{
	tVektor lu, ro;
	} tRechteck;
/*&h-*/


/*&hf*/
tVektor VKomp(double x, double y)
	{
	tVektor r;

	r.x = x;
	r.y = y;
	return (r);
	}


/*&hf*/
tVektor VAdd(tVektor v1, tVektor v2)
	{
	v1.x += v2.x;
	v1.y += v2.y;
	return (v1);
	}


/*&hf*/
tVektor VSub(tVektor v1, tVektor v2)
	{
	v1.x -= v2.x;
	v1.y -= v2.y;
	return (v1);
	}


/*&hf*/
tVektor VSMul(tVektor v, double a)
	{
	v.x *= a;
	v.y *= a;
	return (v);
	}


/*&hf*/
tVektor VMul(tVektor v1, tVektor v2)
	{
	double NeuX;

	NeuX = v1.x * v2.x - v1.y * v2.y;
	v1.y = v1.x * v2.y + v1.y * v2.x;
	v1.x = NeuX;
	return (v1);
	}


/*&hf*/
tVektor VNormiert(tVektor v)
	{
	double b;

	b = hypot(v.x, v.y);
	if (b < 1e-10)
		v.x = 1.0, v.y = 0.0;
	else
		v.x /= b, v.y /= b;
	return (v);
	}


/*&hf*/
tVektor VInvert(tVektor v)
	{
	v.y = - v.y;
	return (v);
	}


/*&hf*/
tVektor VInvert90(tVektor v)
	{
	v.x = - v.x;
	return (v);
	}


/*&hf*/
tVektor VDreh90(tVektor v)
	{
	double NeuX;

	NeuX = - v.y;
	v.y = v.x;
	v.x = NeuX;
	return (v);
	}


/*&hf*/
tRechteck RNeu(void)
	{
	tRechteck r;

	r.lu = VKomp(HUGE_VAL, HUGE_VAL);
	r.ro = VKomp(-HUGE_VAL, -HUGE_VAL);
	return (r);
	}


/*&hf*/
void RErweitern(tRechteck *r, tVektor v)
	{
	if (v.x < r->lu.x)
		r->lu.x = v.x;
	if (v.x > r->ro.x)
		r->ro.x = v.x;
	if (v.y < r->lu.y)
		r->lu.y = v.y;
	if (v.y > r->ro.y)
		r->ro.y = v.y;
	}


/*&hf*/
int RInnen(tRechteck *r, tVektor v)
	{
	return (v.x >= r->lu.x && v.x <= r->ro.x
			&& v.y >= r->lu.y && v.y <= r->ro.y);
	}


